package com.basker.pisces.domain.command.processor;

import com.basker.pisces.domain.command.event.CommandExecuteEvent;
import com.basker.pisces.domain.command.event.CommandExecuteFailureEvent;

/**
 * 命令执行的处理器接口，在命令执行的主要声明周期环节都会接受到事件响应
 *
 * @author hangwen
 */
public interface ICommandExecuteProcessor extends ICommandDataPrepared {

    /**
     * 最后触发，无论成功还是失败都会触发
     *
     * @param event
     */
    default void processAfterInvoke(CommandExecuteEvent event) {

    }

    /**
     * 命令失败时触发
     *
     * @param event
     */
    default void processAfterThrowing(CommandExecuteFailureEvent event) {

    }

    /**
     * 命令执行前触发，此时命令操作的数据对象已经组装完成
     *
     * @param event
     */
    default void processBeforeInvoke(CommandExecuteEvent event) {

    }

    /**
     * 命令完成后（执行成功后）触发
     *
     * @param event
     */
    default void processCompleteInvoke(CommandExecuteEvent event) {

    }
}
